home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / misc / math / libalgo.lha / algomath / src / priarray.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-30  |  1.6 KB  |  128 lines

  1. /* create an array of prime numbers */
  2.  
  3. #include "defs.h"
  4.  
  5. int* am_primes_array(int starting_prime,int primes_wanted)
  6. {
  7.     int n = 0,y=0,a[2];
  8.     int* feld = 0,x=0;
  9.  
  10.     if((feld = (int*)malloc((primes_wanted+1) * sizeof(int)))==NULL)
  11.         return feld;
  12.  
  13.     if(primes_wanted<0)
  14.         primes_wanted = -primes_wanted;
  15.  
  16.     if(starting_prime<0){
  17.         starting_prime = -starting_prime;
  18.  
  19.         x=starting_prime%6;
  20.  
  21.         if(starting_prime<5){
  22.             if(starting_prime<3){    
  23.                 feld[0]=-2;
  24.                 feld[1]=-3;
  25.                 n=2;
  26.                 }
  27.             else if(starting_prime==3){
  28.                 feld[0]=-3;
  29.                 n=1;
  30.                 }
  31.             x=5;
  32.             a[0]=2;
  33.             a[1]=4;
  34.         }
  35.         else if(x==1){
  36.             x=starting_prime;
  37.             a[0]=4;
  38.             a[1]=2;
  39.             n = 0;
  40.         }
  41.         else if(x==5){
  42.             x=starting_prime;
  43.             a[0]=2;
  44.             a[1]=4;
  45.             n = 0;
  46.         }
  47.         else if (x==0){
  48.             x=starting_prime+1;
  49.             a[0]=4;
  50.             a[1]=2;
  51.             n = 0;
  52.         }
  53.         else {
  54.             x=starting_prime+5-x;
  55.             a[0]=2;
  56.             a[1]=4;
  57.             n = 0;
  58.         }
  59.  
  60.  
  61.     while(n < primes_wanted)
  62.     {
  63.         if(am_isprime(x))
  64.             feld[n++] = -x;
  65.         x=x+a[y];
  66.         y++;
  67.         if(y>1)
  68.             y=0;
  69.     }
  70.     feld[n]=0;
  71. }
  72. else{
  73.     x=starting_prime%6;
  74.  
  75.     if(starting_prime<5){
  76.         if(starting_prime<3){    
  77.             feld[0]=2;
  78.             feld[1]=3;
  79.             n=2;
  80.         }
  81.         else if(starting_prime==3){
  82.             feld[0]=3;
  83.             n=1;
  84.             }
  85.         x=5;
  86.         a[0]=2;
  87.         a[1]=4;
  88.     }
  89.     else if(x==1){
  90.         x=starting_prime;
  91.         a[0]=4;
  92.         a[1]=2;
  93.         n = 0;
  94.         }
  95.     else if(x==5){
  96.         x=starting_prime;
  97.         a[0]=2;
  98.         a[1]=4;
  99.         n = 0;
  100.         }
  101.     else if (x==0){
  102.         x=starting_prime+1;
  103.         a[0]=4;
  104.         a[1]=2;
  105.         n = 0;
  106.         }
  107.     else {
  108.         x=starting_prime+5-x;
  109.         a[0]=2;
  110.         a[1]=4;
  111.         n = 0;
  112.         }
  113.  
  114.  
  115.     while(n < primes_wanted)
  116.     {
  117.         if(am_isprime(x))
  118.             feld[n++] = x;
  119.         x=x+a[y];
  120.         y++;
  121.         if(y>1)
  122.             y=0;
  123.     }
  124.     feld[n]=0;
  125. }
  126.     return feld;
  127. }
  128.